#include <math.h>
#include "my_define.h"
/**
 * @brief 对某个像素进行sobel处理
 * 
 * @param imageInput 
 * @param y 
 * @param x 
 * @return uint8 
 */
uint8 Pixel_Sobel(uint8 imageInput[RESULT_HEIGHT][RESULT_WIDTH], uint8 y, uint8 x)
{
	int Gx = 0, Gy = 0;
	float G = 0.0;

	// TODO 不是标准的sobel算子，而且没做边界判断
	Gx = ((uint16)1 * imageInput[y - 1][x + 1] + (uint16)1 * imageInput[y][x + 1] + (uint16)1 * imageInput[y + 1][x + 1]) -
		 ((uint16)1 * imageInput[y - 1][x - 1] + (uint16)1 * imageInput[y][x - 1] + (uint16)1 * imageInput[y + 1][x - 1]);

	Gy = ((uint16)1 * imageInput[y - 1][x - 1] + (uint16)1 * imageInput[y - 1][x] + (uint16)1 * imageInput[y - 1][x + 1]) -
		 ((uint16)1 * imageInput[y + 1][x - 1] + (uint16)1 * imageInput[y + 1][x] + (uint16)1 * imageInput[y + 1][x + 1]);

	// 根据用户自定义的计算精度计算
	// TODO 除以2有道理吗？
	G = (float)(abs(Gx) + abs(Gy)) / 2.0; // 取绝对值
	// TODO 可以用参数管理
	if (G > 160.0)
		return 0;
	else
		return 255;
}
